//
//  RBGNetGet.m
//  BateauGenerique
//
//  Created by Kevin De Jesus Ferreira on 21/05/2014.
//  Copyright (c) 2014 Kevin De Jesus Ferreira. All rights reserved.
//

#import "RBGNetGet.h"
#import "NSString+MD5.h"
#import "Constantes.h"

@interface RBGNetGet ()<NSURLConnectionDelegate>

@end

@implementation RBGNetGet{
    NSMutableData *receivedData;
}


-(void) getDonnees:(NSString *) url
{
    
    NSString * urlFinale;
    [[NSURLCache sharedURLCache]removeAllCachedResponses];


    if ([url rangeOfString:@"resultat-"].location == NSNotFound) {
        
        NSDate* now = [NSDate date];
        NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
        [formatter setDateFormat:@"yyyy-MM-dd"];
        
        NSString *stringFromDate = [formatter stringFromDate:now];
        
        NSString * md5 = [stringFromDate MD5];
        
        urlFinale = [NSString stringWithFormat:@"%@%@kh=%@&idcli=%01d",URL_BASE,url,md5,CLIENT];
    }else{
        urlFinale = url;
    }
    
    urlFinale = [urlFinale stringByReplacingOccurrencesOfString:@" " withString:@"%20"];
    
      NSLog(@"Url finale %@",urlFinale);
    
    
    //créé une requete GET en lui passant l'url et le timeout
    // On construit la requête avec un timeout de 10
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:urlFinale]
                                                           cachePolicy:NSURLRequestReloadIgnoringLocalCacheData
                                                       timeoutInterval:TIME_OUT];
    
    [request setHTTPMethod: @"GET"];
    
    
    receivedData = [NSMutableData data];
    
    
    // On change la méthode en GET
    
    if ([url rangeOfString:@"bodClient.php"].location != NSNotFound || [url rangeOfString:@"email-envoi.php"].location != NSNotFound || [url rangeOfString:@"jetonClient.php"].location != NSNotFound ) {
        
            NSArray* foo = [urlFinale componentsSeparatedByString: @"?"];
            NSString* day = [foo objectAtIndex: 0];
        
            NSString *post =[foo objectAtIndex: 1];
            NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
        
            NSLog(@"First part %@",day);
        NSLog(@"Second part %@",postData);

            NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]];
            
            request = [[NSMutableURLRequest alloc] init] ;
            [request setURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@%@",[foo objectAtIndex: 0],@"?"]]];
            [request setHTTPMethod:@"POST"];
            [request setValue:postLength forHTTPHeaderField:@"Content-Length"];
            [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
            [request setHTTPBody:postData];
        
    }else{
        [request setHTTPMethod: @"GET"];
 
    }
        //   [request setValue:@"charset=UTF-8" forHTTPHeaderField:@"Content-Type"];

    
    //Lance la requête
    [[NSURLConnection connectionWithRequest:request delegate:self] start];
    
    
}

#pragma mark NSURLConnection Delegate Methods




// #################### NOUVELLE VERSION  #####################

//lors de reception de données



#pragma mark - NSURLConnectionDelegate

// Méthode appelée lors de la réception des données
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
    [receivedData appendData:data];
}

//une fois la connexion finie, toutes les données reçues
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    // On récupére les données et on les encode en format UTF8
    NSString * donnees = [[NSString alloc] initWithData:receivedData encoding:NSASCIIStringEncoding];
    
    donnees = [donnees stringByReplacingOccurrencesOfString: @"&amp;" withString:@"&"];
    
    // On appelle la méthode du delegate en lui envoyant les données
    [self.delegate receiveDonnees:donnees];
}

//lors d'une erreur
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
    //on avertie le delegué
    [self.delegate receiveErreur:ERREUR_RESEAU];

}


// Méthode appelée pour la réponse à une requête, permet de connaître le statut de la réponse
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{
    
    // On récupére le statut
    NSHTTPURLResponse* httpResponse = (NSHTTPURLResponse*)response;
    
    int responseStatusCode = [httpResponse statusCode];
    
    
    // Si il y a une erreur lors de la requête
    if(responseStatusCode == 401){
        
        // On renvoie l'erreur au delegate avec le statut
        [self.delegate receiveErreur:responseStatusCode];
    }
}


@end



